As the Internet continues to grow in popularity, providing streaming media such as video content to the online public is also continuing to grow in popularity. Streaming media is a technique for transferring data such that it is processed as a steady and continuous stream. Streaming media is an important technique for distributing large quantities of data because a client system can start displaying the data before the entire file is transmitted. Ideally, the client system receiving the data must be able to collect the data and send it as a steady stream to the application processing the data and converting it to sound and pictures. If the client system receives data more quickly than required, the client system needs to save the excess data to a buffer. If the data is not received quickly enough by the client system, the presentation of the data is not smooth.
Various distribution techniques such as unicast, multicast and broadcast distribution are used for media content delivery.
Unicast distribution is a methodology for distributing content in which the sending server transmits a separate copy of the content over a network to each individual recipient. This technique is simple to implement, but it has significant scaling restrictions if the recipient group is large. In addition, unicast distribution requires extra bandwidth because the same information has to be carried multiple times, even on shared links.
Multicast distribution is a methodology for distributing content whereby the sending server sends out a copy of the content addressed to all of the intended recipients. In IP multicast, a single message is transmitted from a source and the network replicates the message as needed in any particular leg of the network route necessary so that the content reaches each of the different intended recipients. Application-layer multicast schemes typically involve organizing members of a multicast group into a mesh topology in which each node in the topology maintains a state for some number of other nodes sufficient to maintain a high degree of reliability of connectivity. For large amounts of data, multicast distribution is more efficient than unicast transmission because the server sends a message to many recipients simultaneously, but as recipient groups grow large, multicast distribution loses efficiency compared to broadcast distribution. Efficiency of multicast distribution relative to unicast distribution is greatest in areas of the network close to the transmitter and also where there are a plurality of receivers in the same local area network such as in a residential neighborhood or corporate office building, all receiving the same transmission.
Like multicast distribution, broadcast distribution is a methodology in which the same message is sent to multiple recipients. Broadcasting, however, sends a message to all recipients in the network whereas multicasting sends a message to a select list of recipients.
Both multicast and application-layer multicast require some memory resources and some message costs per-ongoing transmission or active receiver/receiver-group. Therefore, multicast distribution typically has some in-network cost related to the size of the audience, even though it usually consumes less bandwidth for a given data message than unicast distribution. Neither unicast nor broadcast requires much, if any, in network memory or administrative messaging, though they consume more bandwidth. Whether broadcast or unicast distribution consumes the most bandwidth depends on the size of the audience relative to the size of the total network. For these reasons and the fixed and variable costs associated with the deployment and operation of data communication networks, there are limited amounts of unicast, multicast and broadcast capacity, respectively, available to network users, and the cost of using capacity of each type may differ from the others and vary over time.
Media content, as distributed by the various distribution techniques described above, is transmitted over a network using one of a number of combinations of formats and protocols. Examples of streaming video file formats are Advanced Streaming Format (ASF) developed by Microsoft Corporation and QuickTime File Format originating from Apple Computer Corporation.
Media content files tend to be very large files and require some data compression in order to be transmitted over a network followed by some decompression in order to be played at the recipient. The hardware or software performing the compression and decompression is typically referred to as a codec. There are many codecs to choose from when sending data across a network. Typically, a codec is selected according to the file format being transmitted.
Other factors in data transmission are error correction protocols. Various error correction protocols are used in media distribution, including protocols such as acknowledgment (ACK) protocols, negative acknowledgment (NAK) protocols and forward error correction codes. An ACK code is a transmission control character used to indicate that a transmitted block of video content was received without errors and that the recipient is ready to accept additional transmissions. The recipient sends an ACK to the sender to indicate that the transmission has been accepted. If the sender does not receive an ACK from the recipient within a predetermined timeframe, the sender interprets the failure to receive the ACK as an indication that the associated block of video content failed to reach the recipient successfully and will resend the block of video content. Although the use of error correction protocols using ACK's can increase transmission accuracy, the increase in accuracy occurs at the expense of a decrease in bandwidth (i.e. a reduction in the capacity of signal transmission due to the consumption of transmission capacity by the ACK's) and consumption of computational resources for processing ACK's.
In contrast to methods using ACK codes, NAK codes are employed to report to a sender when blocks of video content have been received with errors or corruption, rather than report all of the blocks that are received without errors (i.e. as in the case of an ACK-based protocol). The recipient sends a NAK code to the sender to indicate that such a block, received by the recipient, with errors or corruption, must be present. Upon receipt of such a NAK, the sender will resend the appropriate block to the recipient. In the case of connections with a small amount of errors and/or corruption, NAK-based protocols typically consume less bandwidth than ACK-based protocols. Other methods for employing ACK or NAK codes also exist, such as, for example, periodically transmitting ACK's or NAK rather than exchanging them in response to a successful transmission of a block of video content or exchanging them in response to a block of video content with errors or corruption. Both ACK and NAK-based protocols have some versions where ACK or NAK messages may be processed by in-network devices such as routers and switches. This processing typically reduces the requirement for ACK/NAK processing by the sender, but requires the usage of additional memory resources in the participating routers and switches.
In order to determine if a block of content has been received accurately, in both the ACK and NAK based error correction protocols, both the sender and recipient perform a numeric analysis of the video content block sent by the sender and received by the recipient, which generates a numerical code that can be checked in order to determine if errors of corruption has occurred in the block of video content. The sender can send such a code to the recipient after conducting the numerical analysis. Upon receipt of the code, the recipient conducts a parallel numerical analysis of the block of video content to generate an equivalent numerical code. The recipient can then compare the numerical code that the sender created, which it received from the sender, to the numerical code that the recipient calculated and if the recipient finds that the numerical codes are not equal, determine that the block of video content received has experienced an error or corruption. A failure of the two codes to match indicates that corruption has occurred during the course of transmission of the video content, thus indicating that the block in question should be resent by the sender. A match of the two codes by the recipient indicates the completion of a successful transmission of the block of video content. Various alternative methods of calculating the numerical codes include the generation of check bits, cyclic redundancy check codes, and others.
Forward error correction is another method for providing error correction of video content. Forward error correction is a method by which the sender duplicates some of the content (e.g. certain data that is part of the video content) that the sender sends to a recipient. The recipient, upon making a determination that the video content, which the recipient received, has errors or was corrupted, uses the duplicate content to re-create the content originally transmitted. Various schemes are used to determine which content and how much redundant content should be transferred between the sender and recipient. Although forward error correction can reduce transmission errors, it consumes transmission and processing capacity.